package com.naiterui.ehp.bs.emr.remote;

import java.util.Date;
import java.util.List;

import com.naiterui.ehp.bp.bo.doctor.RecomUserInfoBO;
import com.naiterui.ehp.bp.bo.im.DoctorsMedicalRecordBO;
import com.naiterui.ehp.bp.bo.im.MessageSendResultBO;
import com.naiterui.ehp.bp.bo.im.NotifyRevisitBO;
import com.naiterui.ehp.bp.bo.patient.FamilyBO;
import com.naiterui.ehp.bp.bo.patient.PersonalDoctorBO;
import com.naiterui.ehp.bp.bo.recommend.RecomDiagnosisBO;
import com.naiterui.ehp.bp.support.exception.BusinessException;

public interface IEmrRemoter {

    /**
     * 获取医生信息和医生备注患者信息
     * IRemoter.getUserInfo()
     *
     * @param doctorId
     * @param patientId
     * @param fetchNickname 是否需要呢称
     *
     * @return
     *
     * @throws BusinessException
     * @Author lichaopi
     * @Date 2018年5月29日
     * @since 1.0.0
     */
    RecomUserInfoBO getUserInfo(Long doctorId, Long patientId, boolean fetchNickname) throws BusinessException;

    /**
     * 用户登录校验-医生APP
     * IRemoter.checkDrToken()
     *
     * @param doctorId
     * @param token
     *
     * @return
     *
     * @throws BusinessException
     * @Author guoyongxiang
     * @Date 2018年5月30日
     * @since 2.18.0
     */
    boolean checkDrToken(String doctorId, String token) throws BusinessException;

    /**
     * 根据成员id获取家庭成员信息
     * IRemoter.getFamilyByID()
     *
     * @param familyId
     *
     * @return
     *
     * @throws BusinessException
     * @Date 2018年5月30日
     * @since 2.18
     */
    FamilyBO getFamilyByID(Long familyId) throws BusinessException;

    /**
     * 获取医生关注的私人医生数
     * IRemoter.getPersonalDoctorCount()
     *
     * @param patientId
     *
     * @return
     *
     * @throws BusinessException
     * @Date 2018年5月31日
     * @since 2.18
     */
    List<PersonalDoctorBO> getPersonalDoctorList(Long patientId) throws BusinessException;

    /**
     * 向IM发送病例
     * IRemoter.sendImCase()
     *
     * @param patientId
     * @param doctorId
     * @param caseId
     *
     * @return 1-发送成功；0-需要支付
     *
     * @throws BusinessException
     * @Date 2018年5月31日
     * @since 2.18
     */
    Integer sendImCase(Long patientId, Long doctorId, String caseId) throws BusinessException;

    /**
     * 向IM发送复诊对象
     * IRemoter.notifyIM()
     *
     * @param bo
     *
     * @throws BusinessException
     * @Author lichaopi
     * @Date 2018年6月2日
     * @since 1.0.0
     */
    void notifyRevisitIM(NotifyRevisitBO bo) throws BusinessException;

    /**
     * 判断家庭成员关系
     * IRemoter.judgeFamily()
     *
     * @param patientId
     * @param name
     * @param gender
     * @param age
     * @param ageUnit
     *
     * @return
     *
     * @Author lichaopi
     * @Date 2018年6月27日
     * @since 1.0.0
     */
    Integer judgeFamily(Long patientId, String name, Integer gender, Integer age, String ageUnit) throws BusinessException;

    /**
     * 删除复购提醒消息
     * IRemoter.asyncDelRebuyNotice()
     *
     * @param patientId
     * @param visitTime
     *
     * @throws BusinessException
     * @Date 2018年6月30日
     * @since 2.19
     */
    void asyncDelRebuyNotice(Long patientId, Date visitTime) throws BusinessException;

    /**
     * IM发送病历消息
     * IRemoter.sendDoctorRecord()
     *
     * @param doctorsMedicalRecordBO
     *
     * @return
     *
     * @throws BusinessException
     * @Author lichaopi
     * @Date 2018年6月29日
     * @since 1.0.0
     */
    MessageSendResultBO sendDoctorRecord(DoctorsMedicalRecordBO doctorsMedicalRecordBO) throws BusinessException;

    /**
     * 取出符合icd10的诊断
     * IRemoter.getRecomICD10()
     *
     * @param diagnosis
     *
     * @throws BusinessException
     * @Author lichaopi
     * @Date 2018年11月21日
     * @since 3.5.0
     */
    RecomDiagnosisBO getRecomICD10(List<String> diagnosis) throws BusinessException;

    /**
     * 医生pc端token校验
     *
     * @param token
     * @return
     * @throws BusinessException
     */
    Long checkDoctorPcToken(String token) throws BusinessException;
}
